package com.wanho.qz103.hrsaas.commons.dao;

import com.wanho.qz103.hrsaas.commons.exception.DAOException;
import com.wanho.qz103.hrsaas.commons.query.Page;

import java.util.List;

/**
 * 所有的数据访问层接口的父类
 */
public abstract interface BaseDAO<T> {
    /**
     * 分页查询： 统计总记录数  角色 员工 分页查询 真分页：2条SQL  count  limit
     * @return
     * @throws DAOException
     */
    default long selectCount() throws DAOException {
        return 0L ;
    }

    /**
     * 分页查询： 查询当前页数据
     * @param page
     * @return
     * @throws DAOException
     */
    default List<T> selectTopN(Page page) throws DAOException{
        return null ;
    }

    /**
     * 查询 所有数据  没有任何条件  树形表  部门  权限 无需分页
     * @return
     * @throws DAOException
     */
    default List<T> selectAll() throws DAOException{
        return null ;
    }

    /**
     * 根据 id 查询
     * @param id  主键 pk 数据库的唯一标识
     * @return
     * @throws DAOException
     */
    T selectById(String id) throws DAOException ;

    /**
     * 新增
     * @param pojos
     * @return
     * @throws DAOException
     */
    boolean insert(T pojos) throws DAOException ;

    /**
     * 修改
     * @param pojos
     * @return
     * @throws DAOException
     */
    boolean update(T pojos) throws DAOException ;

    /**
     * 删除
     * @param id
     * @return
     * @throws DAOException
     */
    boolean delete(String id) throws DAOException ;
}
